﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ImageProcessingLib
{
    /// <summary>
    /// Интерфейс для кластериазции.
    /// </summary>
    interface IClustering
    {
        /// <summary>
        /// Кластеризация векторов.
        /// </summary>
        /// <param name="observations">Вектора для кластериазции.</param>
        /// <param name="clusterCount">Количество кластеров.</param>
        void Fit(Vector[] observations, int clusterCount);

        /// <summary>
        /// Соотнести вектор к одному из кластеров.
        /// </summary>
        /// <param name="vector"></param>
        /// <returns></returns>
        int Predict(Vector vector);

        /// <summary>
        /// Получение коллекции центров кластеров.
        /// </summary>
        Vector[] Centroids { get; }

        /// <summary>
        /// Метки кластеров.
        /// </summary>
        int[] Labels { get; }

        /// <summary>
        /// Интрефейс функции для вычисления расстояний.
        /// </summary>
        IMetric Metric { get; set; }

        /// <summary>
        /// Максимальное количество итераций.
        /// </summary>
        int MaxIterationCount { get; set; }
    }
}
